package it.mauriziobasile.sincrodir.entita;

import java.util.ArrayList;

public class Directory extends java.io.File {

    private static final long serialVersionUID = 1619737893506501375L;

    private String percorsoCompleto;

    private ArrayList<Directory> dirFigli;

    private ArrayList<File> fileFigli;

    private int numeroFile = 0;

    private int numeroDirectory = 0;

    private boolean alberizzato;
    
    private void init() {
        dirFigli = new ArrayList<Directory>();
        fileFigli = new ArrayList<File>();
        percorsoCompleto = new String();
    }

    public Directory(String percorso, boolean alberizza) {
        super(percorso);
        alberizzato=alberizza;
        if (alberizza) {
            init();
            percorsoCompleto = percorso;
            File questaDir = new File(percorsoCompleto);
            if (questaDir.exists()) {
                java.io.File[] tutto = questaDir.listFiles();
                if (tutto != null) {
                    for (java.io.File singolo : tutto) {
                        if (singolo.isFile() && !singolo.isHidden()) {
                            fileFigli.add(new File(singolo.getAbsolutePath()));
                            numeroFile++;
                        }
                        if (singolo.isDirectory() && !singolo.isHidden()) {
                            dirFigli.add(new Directory(singolo.getAbsolutePath(), true));
                            numeroDirectory++;
                        }
                    }
                }
            }
        }
    }

    public int getNumeroFile() {
        int total = numeroFile;
        for (Directory dir : dirFigli) {
            total += dir.getNumeroFile();
        }
        return total;
    }

    public int getNumeroDirectory() {
        int total = numeroDirectory;
        for (Directory dir : dirFigli) {
            total += dir.getNumeroDirectory();
        }
        return total;
    }

    public void setPercorsoCompleto(String percorsoCompleto) {
        this.percorsoCompleto = percorsoCompleto;
    }

    public String getPercorsoCompleto() {
        return percorsoCompleto;
    }

    public ArrayList<Directory> getDirFigli() {
        return dirFigli;
    }

    public ArrayList<File> getFileFigli() {
        return fileFigli;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj instanceof Directory) {
            Directory altra = (Directory) obj;
            return altra.getName().equals(getName());
        }
        return false;
    }

    public boolean isAlberizzato() {
        return alberizzato;
    }
    
    /*
     * @Override public boolean equals(Object obj) { if (obj instanceof
     * java.io.File){ Directory altra = (Directory)obj; for (File file :
     * fileFigli) { if (!altra.getFileFigli().contains(file)) return false; }
     * for (File file : altra.getFileFigli()) { if (!fileFigli.contains(file))
     * return false; } boolean uguali=true; for (Directory dir : dirFigli) {
     * uguali = uguali && altra.getDirFigli().contains(dir); } for (Directory
     * dir : altra.getDirFigli()) { uguali = uguali && dirFigli.contains(dir); }
     * return uguali && altra.getName().equals(getName()); } return false; }
     * 
     * @Override public int compareTo(java.io.File pathname) { return
     * equals(pathname)?0:1; }
     */
}
